home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / M2 / GEM.MOD < prev    next >
Text File  |  2000-09-26  |  3KB  |  121 lines

  1. (*$S- *)
  2. IMPLEMENTATION MODULE GEM;
  3.  
  4. FROM SYSTEM  IMPORT ADR,ASSEMBLER,BYTE,WORD,ADDRESS,SEGMENT,OFFSET,SEG,OFS;
  5. FROM Storage IMPORT ALLOCATE,DEALLOCATE;
  6. FROM System  IMPORT AX,BX,CX,DX,ES,DS,SI,DI,Trap,XTrap;
  7. FROM Mouse   IMPORT MouseOn,MouseOff;
  8. FROM DOS     IMPORT CloseTemporaryFile;
  9. FROM VGA     IMPORT SetRGB;
  10.  
  11. PROCEDURE RestoreColors();
  12. VAR seg,ofs : CARDINAL;
  13. BEGIN
  14.  seg := SEGMENT(gdos^.oldColors);
  15.  ofs := OFFSET(gdos^.oldColors);
  16.  ASM
  17.   MOV AX,01012H
  18.   MOV BX,0
  19.   MOV CX,16
  20.   MOV DX,seg
  21.   MOV ES,DX
  22.   MOV DX,ofs
  23.   INT 10H
  24.  END (* ASM *);
  25. END RestoreColors;
  26.  
  27. PROCEDURE BackupColors();
  28. VAR seg,ofs : CARDINAL;
  29. BEGIN
  30.  seg := SEGMENT(gdos^.oldColors);
  31.  ofs := OFFSET(gdos^.oldColors);
  32.  ASM
  33.   MOV AX,01017H
  34.   MOV BX,0
  35.   MOV CX,16
  36.   MOV DX,seg
  37.   MOV ES,DX
  38.   MOV DX,ofs
  39.   INT 10H
  40.  END (* ASM *);
  41. END BackupColors;
  42.  
  43. PROCEDURE RemoveGDOSVector();
  44. VAR i : CARDINAL;
  45. BEGIN
  46.  AX := 3;
  47.  Trap(010H);
  48.  IF (gdos^.graphics64 # NIL) THEN
  49.   MouseOff;
  50.   RestoreColors;
  51.   FOR i := 0 TO 99 DO
  52.    IF (gdos^.tempFile[i] # NIL) THEN
  53.     CloseTemporaryFile(gdos^.tempFile[i]);
  54.    END (* IF *);
  55.   END (* FOR *);
  56.   DEALLOCATE(gdos^.graphics64,0FFFFH);
  57.  END (* IF *);
  58.  AX := 025F1H;
  59.  DS := 0;
  60.  DX := 0;
  61.  XTrap(021H);
  62.  AX := 0;
  63.  Trap(033H);
  64.  DEALLOCATE(gdos,SIZE(GDOS));
  65.  gdos := NIL;
  66. END RemoveGDOSVector;
  67.  
  68. PROCEDURE InstallGDOSVector() : BOOLEAN;
  69. VAR i : CARDINAL;
  70. BEGIN
  71.  ALLOCATE(gdos,SIZE(GDOS));
  72.  IF (gdos=NIL) THEN RETURN(FALSE); END;
  73.  BackupColors;
  74.  AX := 012H;
  75.  Trap(010H);
  76.  SetRGB(0,180,180,180);
  77.  SetRGB(1,0,0,0);
  78.  gdos^.mouseLock  := 0;
  79.  ALLOCATE(gdos^.graphics64,0FFFFH);
  80.  IF (gdos^.graphics64 = NIL) THEN
  81.   RemoveGDOSVector();
  82.   RETURN(FALSE);
  83.  END (* IF *);
  84.  gdos^.gdosID[0] := "G";
  85.  gdos^.gdosID[1] := "D";
  86.  gdos^.gdosID[2] := "O";
  87.  gdos^.gdosID[3] := "S";
  88.  gdos^.gdosVersion   := version;
  89.  gdos^.gdosRevision  := revision;
  90.  gdos^.systemMessage := ADR(gdos^.message);
  91.  gdos^.firstWindow   := NIL;
  92.  AX := 025F1H;
  93.  DS := gdos.SEG;
  94.  DX := gdos.OFS;
  95.  XTrap(021H);
  96.  FOR i := 0 TO 99 DO
  97.   gdos^.tempFile[i] := NIL;
  98.  END (* FOR *);
  99.  MouseOn();
  100.  RETURN(TRUE);
  101. END InstallGDOSVector;
  102.  
  103. PROCEDURE GetGDOSVector() : GDOSPtr;
  104. BEGIN
  105.  AX := 035F1H;
  106.  XTrap(021H);
  107.  gdos.SEG := ES;
  108.  gdos.OFS := BX;
  109.  IF NOT (gdos^.gdosID[0]="G") THEN RETURN(NIL); END;
  110.  IF NOT (gdos^.gdosID[1]="D") THEN RETURN(NIL); END;
  111.  IF NOT (gdos^.gdosID[2]="O") THEN RETURN(NIL); END;
  112.  IF NOT (gdos^.gdosID[3]="S") THEN RETURN(NIL); END;
  113.  RETURN(gdos);
  114. END GetGDOSVector;
  115.  
  116. BEGIN
  117.  
  118.  gdos := NIL;
  119.  
  120. END GEM.
  121.